package com.codejiwei.core.rdd

import org.apache.spark.{SparkConf, SparkContext}

object Spark_Operator_Coalesce {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local[*]").setAppName("MyApp")
    val sc = new SparkContext(conf)
    val rdd = sc.makeRDD(List(1, 2, 3, 4, 5, 6), 2)

    //TODO coalesce减少分区
    //用于将多个分区缩减分区，默认情况下不会将数据打乱重新组合，没有shuffle
    //默认的合并规则是计算位置的关系
    //如果想让合并分区后的数据更均衡一些的话，可以使用shuffle
//    val rdd1: RDD[Int] = rdd.coalesce(1)

    //TODO coalesce()扩大分区
    //coalesce算子的第一个参数表示缩减分区的数量，但是这个值可以比原分区大
    //但是如果不适用shuffle情况下，不起作用
    //使用shuffle的情况下，可以分配
    val rdd1 = rdd.coalesce(3, true)



    rdd1.saveAsTextFile("output")
    sc.stop()

  }
}
